import java.util.Random;
import java.util.HashSet;
import java.util.Set;
/****************************************************\
 作者信息：
 姓名：蔺亚楠   学号：202231431   班级：软工2022314班  学院：信息工程学院
 Email: 2259409147@qq.com      电话：16691512559
 版权声明：
 版权由蔺亚楠所有，未经本人允许不得拷贝本人作业
 模块名称: -v0.2.4
 摘要: 生成50道100以内的加法和减法算式模块化改进版-v0.2.4
 相比-v0.1新增其他功能：1)	每个算式还需要答案；（新增）
 2)	加法算式的和不能超过100；（隐含）
 3)	减法算式的差不能小于0；（隐含）
 4)	每行整齐地多显示几个算式。（更改）
 其它说明: 本程序使用Random类生成随机数，通过字符串为数据结构生成加减法算式。
 模块历史:-v0.2.1 -v0.2.2 -v0.2.3
 修改原因：-v0.2.1计算结果错误并且生成的算式数量不够，算式排布不够整齐。
 -v0.2.2修改了计算结果错误的问题，但是生成的算式数量还是不够，排布不够整齐。
 -v0.2.3修改全部问题。
 \****************************************************/
public class MathExerciseV02 {
    public static void main(String[] args) {
        // 创建一个Random对象用于生成随机数
        Random random = new Random();
        // 使用HashSet存储算式，确保算式不重复
        Set<String> exercises = new HashSet<>();
        // 循环直到生成50个不重复的算式
        while (exercises.size() < 50) {
            // 生成两个1到100之间的随机数作为算式的第一个和第二个操作数
            int num1 = random.nextInt(100) + 1;
            int num2 = random.nextInt(100) + 1;
            // 随机选择加法或减法操作符
            char operator = random.nextBoolean() ? '+' : '-';
            int result;
            // 根据操作符生成算式并计算结果
            if (operator == '+') {
                // 确保加法算式的和不大于100
                while (num1 + num2 > 100) {
                    num2 = random.nextInt(100) + 1;
                }
                result = num1 + num2;
            } else {
                // 确保减法算式的差不小于0
                while (num1 - num2 < 0) {
                    num2 = random.nextInt(num1) + 1;
                }
                result = num1 - num2;
            }
            // 格式化算式字符串，包括操作符和结果
            String expression = String.format("%d %c %d = %d", num1, operator, num2, result);
            // 将生成的算式添加到集合中
            exercises.add(expression);
        }

        // 输出所有算式，每行显示5个
        int count = 0; // 计数器，用于跟踪每行已输出的算式数量
        for (String expr : exercises) {
            // 格式化输出，使每个算式左对齐并占用固定宽度的空间
            System.out.print(String.format("%-15s", expr) + "\t");
            count++;
            // 每输出5个算式后换行
            if (count % 5 == 0) {
                System.out.println();
            }
        }
    }
}